package com.cskaoyan.javase.file._3api;

import java.io.File;
import java.io.IOException;

/**
 * @description: File类常用方法
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

public class Demo {
    public static void main(String[] args) {
        //1.创造功能
        //只负责创建文件，目录路径如果不存在，会报错而不是帮你创建
        //public boolean createNewFile()
        /*File f = new File("E:\\1\\1.txt");
        //System.out.println(f.exists());
        //Unhandled exception: java.io.IOException
        System.out.println(f.createNewFile());

        File f2 = new File("E:\\11\\1.txt");
        System.out.println(f2.createNewFile());*/

        /*//文件是允许没有后缀名的,该方法不能创建文件夹,只能创建文件
        File f = new File("E:\\1\\a");
        System.out.println(f.createNewFile());
        */

        //只负责创建目录，但只能创建单层目录，如果有多级目录不存在的话，创建失败
        //public boolean mkdir()  --> make directory
        //File f = new File("E:\\1\\b");
        //System.out.println(f.mkdir());
        //File f2 = new File("E:\\1\\2\\3");
        //System.out.println(f2.mkdir());


        ////只负责创建目录，但可以创建多级目录，如果多级目录不存在，则帮你全部创建
        //建议创建目录,只用该方法
        //public boolean mkdirs()
        //System.out.println(f2.mkdirs());

        //File f = new File("e:\\1\\demo.java");
        //System.out.println(f.mkdirs());


        //2.删除功能
        //public boolean delete()
        //删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录，则该目录必须为空才能删除
        /**
         * 注意事项:
         * 1.该方法是调用系统本地API去删除文件,它是真正意义上的删除(不是移到回收站)
         *      所以操作这个方法要小心一点,不要删除重要文件
         * 2.该方法不能删除非空目录,如果想要删除,需要使用递归删除的方式:
         *      递归删除的主体思想:
         *          a.需要获取目录下所有文件或者文件夹的对象
         *          b.判断
         *              如果是文件,直接删除
         *              如果是目录且是空的,直接删除
         *              如果是非空目录,进去,把里面的东西删完
         *
         *  递归的出口: 删除空目录或文件可以看成是出口
         *  递归的递归体: 非空目录,递归删除
         *
         *  警告:
         *      不要在C盘操作,并且在启动之前,一定要查看自己写的File对象的目录
         *      不要删错文件
         *
         */
        //File f = new File("e:\\");
        //System.out.println(f.delete());

        //3.移动且重命名文件功能
        //public boolean renameTo(File dest)
        //- 当源文件和修改之后的目标文件，在同一目录的时候，效果只是重命名
        //- 当源文件和修改之后的目标文件，不在同一目录的时候，效果是移动且重命名
        //- 当源文件和修改之后的目标文件，同目录同名时，方法返回true，实际没有效果
        //- 真正操作文件，应该使用（IO流操作）
        /*File src = new File("E:\\3\\a.jpg");
        File dst = new File("E:\\新垣结衣.jpg");
        System.out.println(src.renameTo(dst));*/

        //4.判断功能
        //判断File对象是否表示的是一个文件
        //public boolean isFile()
        ////判断File对象是否表示的是一个目录
        //File f = new File("e:\\1");

        //public boolean isDirectory()
        //判断File对象表示的文件或目录，是否真实存在
        //System.out.println(f.isFile());
        //System.out.println(f.isDirectory());
        //public boolean exists()
        ////判断File对象表示的文件，是否可读

        //public boolean canRead()
        //判断File对象表示的文件，是否可写
        //public boolean canWrite()


        //判断File对象表示的文件是否是隐藏文件
        //public boolean isHidden()

        //5.获取功能
        //获取File对象表示的抽象文件的绝对路径
        //public File getAbsolutePath()
        File f = new File("a.txt");
        File f2 = new File("E:\\1\\a.txt");
        System.out.println(f.getAbsoluteFile());

        ////获取File对象表示的抽象路径名的字符串，简单来说，创建的时候给的是什么就输出什么
        //public String getPath()
        System.out.println(f.getPath());
        System.out.println(f2.getPath());


        //获取File对象表示的文件或者目录的文件名
        //public String getName()
        System.out.println(f.getName());
        System.out.println(f2.getName());

        //返回由此抽象路径名表示的文件的所占硬盘空间大小，以字节为单位
        //但是需要注意的是，这个方法只能获取文件的大小，不能获取目录大小
        //public long length()
        System.out.println(f.length());

        ////返回此File对象表示的文件的最后一次修改的时间
        //返回的是毫秒值,时间戳
        //public long lastModified()


    }
}
